<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--<script src="js/huidiao.js" type="text/javascript" charset="utf-8"></script>-->
		<script src="js/jquery-1.10.1.js" type="text/javascript" charset="utf-8"></script>

	</head>

	<body>
		<button id="btn">点击</button>
		<button id="btn1">点击</button>
	</body>
	<script type="text/javascript">
		//		var fun = {
		//			login:function (extras,callback) {
		//				return callback(fun.getextras)
		//			},
		//			getextras:function  (e,callback) {
		//			    console.log(e)
		//				return callback(fun.last)
		//			},
		//			last:function  () {
		//				console.log("这是最后一个方法了")
		//				
		//			}
		//		};
		//		document.querySelector("button").onclick = function  () {
		//			fun.login("点击这个按钮",function  (e) {
		//			        e("执行这个犯法",function  (e) {
		//			        	e()
		//			        })
		//			})
		//		}
		//		//点击按钮的时候，先执行点击的方法，执行完成后，调用login方法，然后在回调函数里面，执行getextras方法
		/*这是完整的四个回调函数*/
		//		var fun = {
		//			BtnClick: function(extras, callback) {
		//				console.log("第" + extras + "次执行");
		//				fun.num++;
		//				return callback(fun.Firstfun)
		//			},
		//			num: 1,
		//			Firstfun: function(extras, callback) {
		//				console.log("第" + extras + "次执行");
		//				fun.num++;
		//				return callback(fun.Secondfun)
		//			},
		//			Secondfun: function(extras, callback) {
		//				console.log("第" + extras + "次执行");
		//				fun.num++;
		//				return callback(fun.Lastfun)
		//			},
		//			Lastfun: function(extras) {
		//				fun.num = 1
		//				console.log(extras)
		//			}
		//		};
		//		document.querySelector("#btn").onclick = function() {
		//			fun.BtnClick(fun.num, function(Firstfun) {
		//				Firstfun(fun.num, function(Secondfun) {
		//					Secondfun(fun.num, function(Lastfun) {
		//						Lastfun("最后一次执行")
		//					})
		//				})
		//			})
		//		};
		//+++++++++++++++++
		(function(user) {
			
			
			user.BtnClick = function(extras, callback) {
				extras = extras || "";
				callback = callback || user.noop;
				console.log("第" + extras + "次执行");
				user.num++;
				return callback(user.Firstfun);
			};
			
			
			user.Firstfun = function(extras, callback) {
				console.log("执行的是fistr方法");
				extras = extras || "";
				callback = callback || user.noop;
				console.log("第" + extras + "次执行");
				user.num++;
				return callback(user.Secondfun);
			};
			
			
			user.Secondfun = function(extras, callback) {
				extras = extras || "";
				callback = callback || user.noop;
				console.log("第" + extras + "次执行");
				user.num++;
				return callback(user.Lastfun);
			};
			
			
			user.Lastfun = function(extras) {
				user.num = 1
				console.log(extras)
			};
			
			
			user.num = 1;
			user.noop = function() {
				
				
			}
		})(window.app = {});
		
		//调用方法的使用
		
		document.querySelector("#btn").onclick = function() {
			app.BtnClick(app.num, function(Firstfun) {
				
				console.log(app.num);
				Firstfun(app.num, function(Secondfun) {
					Secondfun(app.num, function(Lastfun) {
						Lastfun("最后一次执行")
					})
				})
			})
		};
		document.querySelector("#btn1").onclick = function() {
			app.BtnClick(app.num);
			//如果没有传入回调函数，就然callback等于与一个空方法
			//			app.BtnClick();
		};
	</script>

</html>